Remote Direct Memory Access (RDMA) is a method by which an application running in a first server may directly read, write, or both read and write data in memory which resides with a second server, usually where the first and second servers are remote to each other. By mimicking the DMA functions in a processor board in which the processor is not required to move data into the processor prior to writing it to a new location, RDMA provides similar functionality between applications on servers wherein the first application (the initiator) may access data in the target memory without disturbing the processing of the target computer. One very widely supported protocol for RDMA is Request for Comments 5040 (RFC5040) of the Network Working Group of the International Engineering Task Force (IETF), the most recent version having been drafted by R. Recio, et al.
The term “initiator” is used to describe a machine, process, application or client which wishes to access data on another machine, server, or platform. The machine, server or platform where the data actually resides is referred to as a “target”. If a “read” operation is to be performed, the data flow is from the target to the initiator. If a “write” operation is to be performed, the data flow is from the initiator to the target.
Data which is being remotely read or written is carried within a payload area of the RDMA protocol. Referring to FIG. 4a, a table is reproduced from RFC5040 which shows a data transmission for RDMA implemented on Transmission Control Protocol (TCP). The table is 32 bits wide (one double word), and the height (vertical distance) indicates the length of each section or field of the message in double words. Ellipses are shown along the vertical edges of the sections for which the length is variable depending on the contents of the message. Data is transmitted serially, starting with the first bit in the upper left corner and proceeding across towards the right to the end of the first double word, then continuing to the first bit (on the left) of the second double word through to the 32nd bit of the second word, etc., until the last bit of the check value (CRC) is transmitted (bottom right corner of the diagram).
Generally speaking, there are a number of headers (TCP, MPA, DDP, and RDMA) which precede transmission of the actual data in the payload, followed by the check value (cyclic redundancy check or CRC).
While other implementations of RDMA may include control data for other protocols, FIG. 4a provides a general understanding of the nature of how the payload data is embedded within a message having a structure in which there are a number of other “overhead” fields (e.g. headers, pads, separators, etc.).